<?php
namespace app\mine;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class jwtService
{
    public function generateToken($data, $key) {
        $payload = [
            'iss' => 'http://localhost', // 签发者
            'aud' => 'http://localhost', // 面象的用户
            'iat' => time(), // 签发时间
            'nbf' => time(), // 立马生效
            'exp' => time() + 7200, // token过期时间
            'data' => $data // 自定义数据，例如用户ID
        ];
        $jwt = JWT::encode($payload, $key, 'HS256');
        return $jwt;
    }

    public function verifyToken($token, $key) {
        try {
            JWT::$leeway = 60; // 当前时间减去60，把时间留点余地
            $decoded = JWT::decode($token, new Key($key, 'HS256'));
            $arr = (array)$decoded;
            return $arr['data'];
        } catch (\Firebase\JWT\SignatureInvalidException $e) {
            // 签名不正确
        } catch (\Firebase\JWT\BeforeValidException $e) {
            // 签名在某个时间点之后才能用
        } catch (\Firebase\JWT\ExpiredException $e) {
            // token过期
        } catch (\Exception $e) {
            // 其他错误
        }
        return null;
    }
}